// 引用 express 框架
const express = require('express');
// 处理路径
const path = require('path');
// 引入body-parser 用来处理post请求参数
const bodyParser = require('body-parser');
// 导入express-session模块
const session = require('express-session'); 
// 导入 dateformat 第三方模块 
const dateFormat = require('dateformat');
// 导入 morgan 第三方模块
const morgan = require('morgan');
// 导入config模块
const config = require('config');
// 导入 art-template 为下面模板文件引入 dateformat 做铺垫
const template = require('art-template');
// 创建服务器   
const app = express();
// 引入数据库链接
require('./model/connect');



// 处理post请求参数  只能处理普通的post 不能处理二进制数据
app.use(bodyParser.urlencoded({ extended: false }));
// app.use(express.urlencoded({ extended: false }));

// 配置 session    拦截所有登录请求交给 session 处理 saveUninitialized 在用户我登录状态下是否存储默认 cookie  maxAge 设置 cookie 过期时间
app.use(session({secret: 'secret key', saveUninitialized: false, cookie: {maxAge: 24*60*60*1000}})); 

// 告诉 express 你的模板根路径  app.use('固定写法',模板路径));
app.set('views',path.join(__dirname,'views'));
// 告诉 express 你的模板后缀
app.set('view engine', 'art');
//  设置渲染 art 模板时 使用的是什么引擎
app.engine('art', require('express-art-template')); 
//  像模板内导入 dateFormat 变量
template.defaults.imports.dateFormat = dateFormat;


// 开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));

console.log(config.get('title'));

if(process.env.NODE_ENV == 'development') {
    // 开发环境
    // 开发环境中将客户端发送到服务端的请求打印在控制台中
    app.use(morgan('dev'))
    console.log('当前是开发环境~');
}else {
    // 生产环境
    console.log('当前是生产环境~');
}



// 引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');
const artTemplate = require('_art-template@4.13.2@art-template');

// 拦截请求 判断登录状态
app.use('/admin',require('./middleware/loginGuard'))

//  为路由匹配请求路径
app.use('/home',home);
app.use('/admin',admin);

// 使用中间键为新增用户添加重定向 
app.use((err, req, res, next)=> {
    // 传入的数据都在err中
    // JSON.parse() 将字符串对象转换为对象类型
    const result = JSON.parse(err);
    // 通过循环遍历拼接参数
    let parmes = [];
    for(let attr in result) {
        if(attr != 'path') {
            parmes.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${parmes.join('&')}`);
})

// 监听端口
app.listen(80);
console.log('网站服务器启动成功~,请访问 localhost');
